package org.magicsoft.office.test.excel.impt.demo1;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.SpreadsheetMLPackage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Demo1 {

	private static final Logger logger = LoggerFactory.getLogger(Demo1.class);

	private Connection con = null;

	private InputStream is = null;

	@Before
	public void before() throws ClassNotFoundException, SQLException, Docx4JException, FileNotFoundException {
		Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		String url = "jdbc:sqlserver://localhost:1433;databaseName=test";
		String username = "sa";
		String password = "qwe123!@#";
		this.con = DriverManager.getConnection(url, username, password);
		this.is = Demo1.class.getResourceAsStream("Demo1模板.xlsx");

		// 预加载，排除第一次加载的耗时。
		SpreadsheetMLPackage.load(Demo1.class.getResourceAsStream("Demo1模板.xlsx"));
	}

	@Test
	public void testImport() {
		if (this.con == null || this.is == null) {
			return;
		}

		// Date date1 = new Date();
		// ExcelImport excelImport = new ExcelImport(this.con);
		// // 使用物理表可以帮助我们调式程序，看到导入结果，但正式运行时不建议调用。
		// excelImport.usePhysicalTable();
		// excelImport.importSheets(this.getModel(), this.is);
		// Date date2 = new Date();
		// logger.info("导入完毕，总耗时：{}", ((date2.getTime() - date1.getTime()) /
		// 1000));
	}

	// private List<Sheet> getModel() {
	// List<Sheet> sheets = new ArrayList<Sheet>();
	//
	// // 声明导入的目标表。
	// List<TargetTable> targetTables = new ArrayList<TargetTable>() {
	// {
	// // 中间的参数是别名，后续会用来生成id辅助字段。
	// // 一般情况下可以不写，不写默认和第一个参数保持一致，但为了兼容oracle，如果第一个参数长度超过20，必须指定一个长度小于20的别名。
	// this.add(new TargetTable("cd_undertaketeachtask", "t1"));
	// }
	// };
	//
	// // 声明excel列。
	// List<Column> columns = new ArrayList<Column>() {
	// {
	// // 从A到H列没有指定（临时表）字段类型，长度和精度，三者默认分别是NVARCHAR, 255和 2。
	// // bind方法用来指定excel这一列和数据库中哪一列对应。
	// this.add(new Column("A").bind("cadreid_"));
	// // 没有bind，说明不会将数据反写到正式表中。
	// this.add(new Column("B"));
	// // 这个例子中间3列不需要导入
	// this.add(new Column("F").bind("academicyear_"));
	// this.add(new Column("G").bind("semester_"));
	// this.add(new Column("H").bind("coursename_"));
	// this.add(new Column("I", SQLType.INTEGER).bind("period_"));
	// this.add(new Column("J", SQLType.INTEGER).bind("classnumber_"));
	// this.add(new Column("K").bind("teachobject_"));
	// this.add(new Column("L").bind("teachtimestr_"));
	// this.add(new Column("M", SQLType.INTEGER).bind("leisureperiodnumber_"));
	// this.add(new Column("N", SQLType.INTEGER).bind("totalperiodnumber_"));
	// }
	// };
	//
	// sheets.add(new Sheet(targetTables, columns));
	// return sheets;
	// }

	@After
	public void after() {
		if (is != null) {
			try {
				is.close();
			} catch (IOException e) {
				logger.error(e.getMessage(), e);
			}
		}
		if (con != null) {
			try {
				con.close();
			} catch (SQLException e) {
				logger.error(e.getMessage(), e);
			}
		}
	}

}
